
import  getUserTempId from  '../../utils/userTempId';
import { SET_USERTOKEN_STATE,SET_USERINFO_STATE,RESET_USER_STATE, } from '../constant-type';
import {reqLogin,reqLogout,reqUserInfo} from '@/api'
// 引入token
import {getToken,setToken,removeToken} from '../../utils/token'

const state ={
    userTempId:getUserTempId(),
    token:getToken() || '',
    userInfo: {},
};

const mutations ={
    // 1.修改vuex数据token的值
    [SET_USERTOKEN_STATE](state,payload){
        state.token = payload.token;
        // 持久化存储token
        setToken(payload.token)
    },

    //2. 修改vuex数据userInfo的值
    [SET_USERINFO_STATE](state,payload){
        state.userInfo = payload.userInfo;
    },
  //3.重置token和user数据
  [RESET_USER_STATE](state) {
    state.token = ""; //清除token
    removeToken(); //清除持久化存储的token
    state.userInfo = {}; //清除用户信息
  },
};

const actions ={
    //2. 登录请求获取token
    async reqLogin({commit},userInfo){
        try{
            const re = await reqLogin(userInfo);
            console.log(re,'reqLogin')
            commit(SET_USERTOKEN_STATE,re);
        }catch(e){
            alert(e.message)
            //这样就算是异常了,可以让调用函数的地方得到一个失败的Promise进行异常处理
            return Promise.reject();
        }
    },

    // 2.请求用户信息
    async getUserInfo({commit}){
        try{
            const re = await reqUserInfo();
            console.log(re,'reqUserInfo');
            commit(SET_USERINFO_STATE,{userInfo:re})
        }catch(e){
            alert(e.message);
            //因为当前函数已经使用try处理异常了,所以在调用函数的地方无法得到异常存在,所以需要我们在catch的位置进行抛出失败的promise,则当前函在失败的情况下就会返回失败的promise
            return Promise.reject(2)
        }
    },
    // 退出登录
    async getLogout({commit}){
        try{
            await reqLogout();
            alert("退出登录成功");
            // 清理数据
            commit(RESET_USER_STATE)
        }catch(e){
            alert(e.message);
        }
    },
    // 清理user数据的action方法
    resetToken({commit}){
        commit(RESET_USER_STATE);

    }

};

export default{
    namespaced:true,
    state,
    mutations,
    actions
}